package AdminBD;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import util.EncriptadorMD5;
import adminHibernate.HibernateConnection;
import entidadesHibernate.Rol;
import entidadesHibernate.Usuario;

public class DAOUsuarioMySql implements DAOUsuario {

	
	private EncriptadorMD5 encriptador = new EncriptadorMD5();
	
	public boolean agregarUsuario(Usuario user){
			
			Boolean resultado = false;
			
			Session session = HibernateConnection.conectar();
			
			String pass2 = encriptador.encriptar(user.getPass());
			user.setPass(pass2);
			
			try { 
				
				session.beginTransaction();			
				session.save(user);										
				session.getTransaction().commit();
				
				resultado = true;
				
				}
			catch(HibernateException e) {
			       System.out.println(e);
			     } 
			finally { 
				session.close();
				}
			
			return resultado;
			
		}	
		
		public boolean agregarRol(Rol rol){
			
			Boolean resultado = false;
			
			Session session = HibernateConnection.conectar();
					
			try { 
				
				session.beginTransaction();			
				session.save(rol);										
				session.getTransaction().commit();
				
				resultado = true;
				
				}
			catch(HibernateException e) {
			       System.out.println(e);
			     } 
			finally { 
				session.close();
				}
			
			return resultado;
			
		}
		
		public Rol getRolByID(int id){
			Session session = HibernateConnection.conectar();
			
			String hql = "from Rol where id="+id;
			
			Rol rol = new Rol();
			
			try { 
				
				session.beginTransaction();			
				Query query = session.createQuery(hql);
				rol = (Rol) query.uniqueResult();													
				session.getTransaction().commit();							
				
				}
			catch(HibernateException e) {
			       System.out.println(e);
			     } 
			finally { 
				session.close();
				}
			
			return rol;
		}
		
		public boolean validarUsuario(String nombreUsuario, String pass){ //nombreUsuario es el DNI 
			
			boolean resultado = false;
			
			if(nombreUsuario!= null && pass!=null && nombreUsuario.length()>0 && pass.length()>0){	
				
				Session session = HibernateConnection.conectar();		
				
				String hql = "from Usuario where nombreUsuario = '" + nombreUsuario + "'";
				
				Usuario ficha = new Usuario();
				
				try { 
					
					session.beginTransaction();			
					Query query = session.createQuery(hql);
					ficha = (Usuario) query.uniqueResult();													
					session.getTransaction().commit();		
					
					if(ficha!=null){
						String pass2 = encriptador.encriptar(pass);
						if(pass2.equals(ficha.getPass())){				
							resultado = true;
						}					
					}				
									
					}
				catch(HibernateException e) {
				       System.out.println(e);
				     } 
				finally { 				
									
					session.close();
					}
			}		
					
			return resultado;
		
	}
	
		public Usuario buscarUsuario(String cadena){		
					
			Session session = HibernateConnection.conectar();
			
			String hql = "from Usuario where nombreUsuario = '" + cadena + "'";
			
			Usuario user = new Usuario();
			
			try { 
				
				session.beginTransaction();			
				Query query = session.createQuery(hql);
				user = (Usuario) query.uniqueResult();													
				session.getTransaction().commit();							
				
				}
			catch(HibernateException e) {
			       System.out.println(e);
			     } 
			finally { 
				session.close();
				}
			
			return user;	
	}
		
	public boolean existeUsuario(String cadena){
		
		boolean resultado = false;
		
		Session session = HibernateConnection.conectar();
		
		String hql = "from Usuario where nombreUsuario = '" + cadena + "'";
		
		Usuario ficha = new Usuario();
		
		try { 
			
			session.beginTransaction();			
			Query query = session.createQuery(hql);
			ficha = (Usuario) query.uniqueResult();													
			session.getTransaction().commit();		
					
			if(ficha!=null){				
				resultado = true;
			}			
			
			}
		catch(HibernateException e) {
		       System.out.println(e);
		     } 
		finally { 
			session.close();
			}
		
		return resultado;
	
	}
	
	public List<Rol> getRoles() {
		
		Session session = HibernateConnection.conectar();
		
		List<Rol> roles = new ArrayList<Rol>();
		String hql = "from Rol";
		
		try { 
			session.beginTransaction();			
			Query query = session.createQuery(hql);
			roles = query.list();													
			session.getTransaction().commit();		
			
			}
		catch(HibernateException e) {
		       System.out.println(e);
		     } 
		finally { 
			session.close();
			}
		return roles;
	}	
	
	public int prox_ID(){
			
			Session session = HibernateConnection.conectar();
			
			String hql = "select max(id) from Usuario";
				
			Integer id=0;	
			
			try { 
				
				session.beginTransaction();	
				Query query = session.createQuery(hql);
				id = (Integer) query.uniqueResult();			
				session.getTransaction().commit();		
			
				}
			catch(HibernateException e) {
			       System.out.println(e);
			     } 
			finally { 
				session.close();
				}
			
			if(id==null) id=1;
			else id++;
			
			return id;
		
	}


	
}
